package cn.itsource.timer;

import java.util.Date;
import java.util.Timer;
import java.util.TimerTask;

/**
 *	Timer类：定时器类。执行定时任务的。
 *	作用：
 *		1. 定时上传（闲时上传）
 *		2. 断点续传（配合iO中RandomAccessFile类一起使用）
 *
 *	使用：
 *		1. 创建对象
 *			Timer() 创建一个新的定时器对象
 *			Timer(String name) 创建一个新的定时器，其相关线程具有指定的名称
 *
 *		2. 调用方法
 *			1.void schedule(TimerTask task, Date time) 在指定的时间执行指定的任务  
			2.void schedule(TimerTask task, long delay) 
				在指定的毫秒数之后执行指定的任务。  
			3.void schedule(TimerTask task, Date firstTime, long period) 
				从指定 的时间开始 ，间隔指定的毫秒数重复的执行
			4.void schedule(TimerTask task, long delay, long period) 
				从指定 的时间延迟后 ，间隔指定的毫秒数重复的执行
				
			5.void scheduleAtFixedRate(TimerTask task, Date firstTime, long period) 
				从指定 的时间开始 ，间隔指定的毫秒数重复的执行 (如果当期覅人Time是过去时间，会一次性将所有缺少的任务执行完毕)
			6.void scheduleAtFixedRate(TimerTask task, long delay, long period) 
				从指定 的时间延迟后 ，间隔指定的毫秒数重复的执行(不能执行过去任务，否则会抛出异常，delay不能为负数)
			7. void cancel() 终止当前任务。
 */
public class TimerTest {

	public static void main(String[] args) {
		//创建定时器对象
		Timer timer = new Timer();
		
		Date date = new Date();
		//1.void schedule(TimerTask task, Date time) 在指定的时间执行指定的任务  
//		timer.schedule(new MyTimerTask(), date);
		
		//2.void schedule(TimerTask task, long delay) 在指定的毫秒数之后执行指定的任务。  
//		timer.schedule(new MyTimerTask(), 2000);//2秒后执行定时任务
		
		//3.void schedule(TimerTask task, Date firstTime, long period) 从指定 的时间开始 ，间隔指定的毫秒数重复的执行
//		Date past = new Date(1L);//这是过去时间
//		Date past = new Date(System.currentTimeMillis() + 2000);//这是将来时间
//		timer.schedule(new TimerTask() {
//			@Override
//			public void run() {
//				System.out.println("啪啪啪....");
//			}
//		}, past,1000);//过去时间也可以
		
		//4.void schedule(TimerTask task, long delay, long period) 从指定 的时间延迟后 ，间隔指定的毫秒数重复的执行
//		timer.schedule(new TimerTask() {
//			@Override
//			public void run() {
//				System.out.println("啪啪啪....");
//			}
//		}, 2000,1000);//不能使用过去时间
		
		
		//	5.void scheduleAtFixedRate(TimerTask task, Date firstTime, long period) 
		//从指定 的时间开始 ，间隔指定的毫秒数重复的执行 (如果Time是过去时间，会一次性将所有缺少的任务执行完毕)
//		Date past = new Date(1L);//这是过去时间
////		Date past = new Date(System.currentTimeMillis() + 2000);//这是将来时间
//		timer.scheduleAtFixedRate(new TimerTask() {
//			@Override
//			public void run() {
//				System.out.println("啪啪啪....");
//			}
//		}, past,1000);
		
		//6.void scheduleAtFixedRate(TimerTask task, long delay, long period) 
		//从指定 的时间延迟后 ，间隔指定的毫秒数重复的执行(不能执行过去任务，否则会抛出异常，delay不能为负数)
//		timer.scheduleAtFixedRate(new TimerTask() {
//			@Override
//			public void run() {
//				System.out.println("啪啪啪....");
//			}
//		}, 2000,1000);//不能使用过去时间
		
		//7. void cancel() 终止当前任务。
		timer.scheduleAtFixedRate(new TimerTask() {
			//准备一个计时器
			int count = 1;
			@Override
			public void run() {
				if (count == 5) {
					timer.cancel();//满足5次就结束任务
				}
				System.out.println("啪啪啪....");
				count++;
			}
		}, 2000,1000);//不能使用过去时间
		
	}

}
